<HTML>
<head>
<title>Test case for bug 40952</title>
</head>
<body>
<p> Test case for <a href="https://bugs.webkit.org/show_bug.cgi?id=40952"> bug 40952</a>: Onloadend event is not supported in XMLHttpRequest</p>
<p> Verify that a loadend ProgressEvent is dispatched after a load ProgressEvent when a synchronous request completes normally.<br/>
Verify that a loadend ProgressEvent is not dispatched after abort() is called when a synchronous request completes normally.</p>
<p>PASS PASS PASS should appear below:</p>
<p id=console></p>
<script type="text/javascript">
if (window.testRunner) {
    testRunner.dumpAsText();
    testRunner.waitUntilDone();
}

function log(message)
{
    var consoleElt = document.getElementById("console");
    consoleElt.appendChild(document.createTextNode(message + " "));
}

var xhr = new XMLHttpRequest();
var results;

function logProgressEvent(e) {
    results += " " + e.type;
}

function logUnexpectedProgressEvent(e) {
    results += " [unexpected ProgressEvent: " + e.type + "]";
    completeTest();   
}

function completeTest(expected)
{
    log(results == expected ? "PASS" : "FAILED results : '" + results + "', expected : '" + expected + "'");
    if (window.testRunner)
        testRunner.notifyDone();
}

function testNormal()
{
    results = "";

    xhr.onloadstart = logUnexpectedProgressEvent;
    xhr.onabort = logUnexpectedProgressEvent;
    xhr.onerror = logUnexpectedProgressEvent;
    xhr.onload = logProgressEvent;
    xhr.onloadend = logProgressEvent;

    xhr.open("GET", "resources/get.txt", false); 
    xhr.send();
    
    completeTest(" load loadend");
}

function testError()
{
    results = "";

    xhr.onloadstart = logUnexpectedProgressEvent;
    xhr.onabort = logUnexpectedProgressEvent;
    xhr.onerror = logUnexpectedProgressEvent;
    xhr.onload = logUnexpectedProgressEvent;
    xhr.onloadend = logUnexpectedProgressEvent;

    xhr.open("GET", "../resources/infinite-loop.php", false); 
    try {
        xhr.send();
    }
    catch (e) {
        if (e.code != e.NETWORK_ERR)
            results += " " + e;
    }
    
    completeTest("");
}

function testAbort()
{
    results = "";

    xhr.onloadstart = logUnexpectedProgressEvent;
    xhr.onabort = logUnexpectedProgressEvent;
    xhr.onerror = logUnexpectedProgressEvent;
    xhr.onload = logUnexpectedProgressEvent;
    xhr.onloadend = logProgressEvent;
    xhr.onreadystatechange = function(e) {
        if (xhr.readyState == xhr.DONE)
            xhr.abort();
    }

    xhr.open("GET", "resources/get.txt", false); 
    try {
        xhr.send();
    }
    catch (e) {
        if (e.code != e.NETWORK_ERR)
            results += " " + e;
    }
    
    completeTest("");
}

testNormal();
testError();
testAbort();

</script>
</body>
